package sdk;

import cn.hutool.http.Method;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.Singular;

import java.util.Map;

/**
 * 代理请求参数类
 *
 * @author 王松
 * @mail 1720696548@qq.com
 * @date 2025/5/30 11:47
 */
@Getter
@Setter
@Builder
public class XjHttpRequest {
    /**
     * url 请求地址 (必填)
     */
    private String url;
    /**
     * url 请求方式 (必填)
     * GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE, CONNECT, PATCH
     */
    private Method method;
    /**
     * 超时时间-毫秒-代理服务的请求超时时间 （默认30 * 1000）
     */
    private Integer timeout;

    /**
     * header 参数
     */
    @Singular("header")
    private Map<String, String> headers;
    /**
     * query 参数
     */
    @Singular("form")
    private Map<String, Object> form;

    /**
     * body 参数 (推荐传递 json 字符串)
     */
    private String body;


    // 快捷方法
    public static XjHttpRequestBuilder get(String url) {
        return XjHttpRequest.builder()
                .url(url)
                .method(Method.GET);
    }

    public static XjHttpRequestBuilder post(String url) {
        return XjHttpRequest.builder()
                .url(url)
                .method(Method.POST);
    }

    public static XjHttpRequestBuilder put(String url) {
        return XjHttpRequest.builder()
                .url(url)
                .method(Method.PUT);
    }

    public static XjHttpRequestBuilder delete(String url) {
        return XjHttpRequest.builder()
                .url(url)
                .method(Method.DELETE);
    }

    /**
     * 在 Builder 中增加快捷方法
     */
    public static class XjHttpRequestBuilder {
        public XjHttpRequestResult execute(boolean isProxy) {
            return XjProxyUtil.request(build(), isProxy);
        }
    }
}
